﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Logic.Interfaces;
using Crosland.Automotriz.Logic.Linq;
using System.Configuration;
using Crosland.Automotriz.Core;
using Crosland.Automotriz.Seguridad.ControlExeption;
using DevExpress.Web.ASPxGridView;
using System.Drawing;

namespace Crosland.Automotriz.Web.Seguridad
{
    public partial class wFrmTablaGeneral : System.Web.UI.Page
    {
        iTablaGeneralCab itablageneralcab=new clsT_Mae_Tabla_General_CabLogic();
        string idSeguridad = ConfigurationManager.AppSettings["Seguridad"];

        iTablaGeneralDet itablageneralDet = new clsT_Mae_Tabla_General_DetLogic();
   


        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack) {

                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", "JavaScript:confirmSubmitResult();", true);
                this.ListaTablaGeneralCab();

              


            }
            this.ListaModuloNuevo();
            this.ListaModuloModificar();
            //this.ListaTablaCabeceraN();
            //this.ListaTablaCabeceraM();

        }



        void ListaTablaGeneralCab() {

            try
            {
                grdListaTabla.DataSource = itablageneralcab.lista();
                grdListaTabla.DataBind();

            }
            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaTablaGeneralCab");
                MensajesError(ex.Message, ex, "ListaTablaGeneralCab");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaTablaGeneralCab");
                MensajesError(ex.Message, ex, "ListaTablaGeneralCab");
            }

        }


        //void ListaTablaCabeceraN()
        //{


        //    try
        //    {
        //        cboTabla.DataSource = itablageneralcab.lista();
        //        cboTabla.ValueField = "ID_GENERAL_CAB";
        //        cboTabla.TextField = "NOM_TABLA";
        //        cboTabla.DataBind();

        //    }
        //    catch { }




        //}

        //void ListaTablaCabeceraM()
        //{


        //    try
        //    {
        //        cboTablaM.DataSource = itablageneralcab.lista();
        //        cboTablaM.ValueField = "ID_GENERAL_CAB";
        //        cboTablaM.TextField = "NOM_TABLA";
        //        cboTablaM.DataBind();

        //    }
        //    catch { }




        //}

        //operaciones de la tabla cabecera




        void ListaModuloNuevo()
        {

            try
            {
                clsT_Mae_ModuloLogic clst_mae_modulo = new clsT_Mae_ModuloLogic();
                cboModuloN.DataSource = clst_mae_modulo.listaModulo();
                cboModuloN.ValueField = "ID_MODULO";
                cboModuloN.TextField = "NOM_MODULO";
                cboModuloN.DataBind();
            }
            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaModuloNuevo");
                MensajesError(ex.Message, ex, "ListaModuloNuevo");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaModuloNuevo");
                MensajesError(ex.Message, ex, "ListaModuloNuevo");
            }


        }
        void ListaModuloModificar()
        {

            try
            {
                clsT_Mae_ModuloLogic clst_mae_modulo = new clsT_Mae_ModuloLogic();
                cboModuloM.DataSource = clst_mae_modulo.listaModulo();
                cboModuloM.ValueField = "ID_MODULO";
                cboModuloM.TextField = "NOM_MODULO";
                cboModuloM.DataBind();
            }
            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaModuloModificar");
                MensajesError(ex.Message, ex, "ListaModuloModificar");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaModuloModificar");
                MensajesError(ex.Message, ex, "ListaModuloModificar");
            }




        }




        void GrabarTabla()
        {

            try
            {


                T_MAE_TABLA_GENERAL_CAB t_mae_tabla_general_cab = new T_MAE_TABLA_GENERAL_CAB();
                t_mae_tabla_general_cab.ID_GENERAL_CAB = itablageneralcab.UltimoNumero() + 1;
                t_mae_tabla_general_cab.NOM_TABLA = txtNombre.Text;
                t_mae_tabla_general_cab.DES_OBSERVACIONES = txtObservacion.Text;
                t_mae_tabla_general_cab.ID_MODULO = Convert.ToInt32(cboModuloN.SelectedItem.Value);
                if (chkActivo.Checked == true)
                {

                    t_mae_tabla_general_cab.IND_ACTIVO = true;

                }
                else
                {
                    t_mae_tabla_general_cab.IND_ACTIVO = false;
                }

                if (itablageneralcab.Insertar(t_mae_tabla_general_cab))
                {

                    lblMsjSql.Text = string.Empty;
                    lblMsjSql.Text = "Se grabó correctamente";
                    string scriptExeption = "ShowPopupMsjSql();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);


                }
                else
                {


                    lblMsjSql.Text = string.Empty;
                    lblMsjSql.Text = "Error al actualizar en la Base Datos";
                    string scriptExeption = "ShowPopupMsjSql();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);

                }

            }
            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "GrabarTabla");
                MensajesError(ex.Message, ex, "GrabarTabla");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "GrabarTabla");
                MensajesError(ex.Message, ex, "GrabarTabla");
            }







        }


        void ModificarTabla()
        {

            try
            {

                T_MAE_TABLA_GENERAL_CAB t_mae_tabla_general_cab = new T_MAE_TABLA_GENERAL_CAB();
                t_mae_tabla_general_cab.ID_GENERAL_CAB = Convert.ToInt32(grdListaTabla.GetRowValues(grdListaTabla.FocusedRowIndex, "ID_GENERAL_CAB"));
                t_mae_tabla_general_cab.NOM_TABLA = txtNombreM.Text;
                t_mae_tabla_general_cab.DES_OBSERVACIONES = txtObservacionM.Text;
                t_mae_tabla_general_cab.ID_MODULO = Convert.ToInt32(cboModuloM.SelectedItem.Value);
                if (chkActivoM.Checked == true)
                {

                    t_mae_tabla_general_cab.IND_ACTIVO = true;

                }
                else
                {
                    t_mae_tabla_general_cab.IND_ACTIVO = false;
                }

                if (itablageneralcab.Modificar(t_mae_tabla_general_cab))
                {

                    lblMsjSql.Text = string.Empty;
                    lblMsjSql.Text = "Se Actualizó correctamente";
                    string scriptExeption = "ShowPopupMsjSql();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);



                }
                else
                {

                    lblMsjSql.Text = string.Empty;
                    lblMsjSql.Text = "Error al grabar en la Base Datos ";
                    string scriptExeption = "ShowPopupMsjSql();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);


                }
            }
            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ModificarTabla");
                MensajesError(ex.Message, ex, "ModificarTabla");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ModificarTabla");
                MensajesError(ex.Message, ex, "ModificarTabla");
            }


        }



        public string nombre = "";
           private int  BuscarNombreTabla()
        {
            int list = 0;
            try
            {
            list = itablageneralcab.ListarFiltroNombre(txtNombre.Text.ToLower(), Convert.ToInt32(cboModuloN.SelectedItem.Value));

          
            }
            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "BuscarNombreTabla");
                MensajesError(ex.Message, ex, "BuscarNombreTabla");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "BuscarNombreTabla");
                MensajesError(ex.Message, ex, "BuscarNombreTabla");
            }

            return list;

        }



        //protected void btnVerDetalle_Click(object sender, EventArgs e)
        //{
        //    try
        //    {

        //        Session["ID_GENERAL_CAB"] = Convert.ToInt32(grdListaTabla.GetRowValues(grdListaTabla.FocusedRowIndex, "ID_GENERAL_CAB"));
        //        Global.nom_tabla_cab = Convert.ToString(grdListaTabla.GetRowValues(grdListaTabla.FocusedRowIndex, "NOM_TABLA"));
        //        Response.Redirect("wFrmTablaDetalle.aspx?id="+idSeguridad);
        //    }
        //    catch{}

            
        //}

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Seguridad/wFrmDefault.aspx");
        }

        protected void grdListaTabla_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            this.ListaTablaGeneralCab();
        }

        protected void grdListaTabla_PageIndexChanged(object sender, EventArgs e)
        {
            this.ListaTablaGeneralCab();
        }

     

        protected void grdListaTabla_FocusedRowChanged(object sender, EventArgs e)
        {
            this.RecuperarDatosAModificados();
            this.ListaTablaDetalle();
            grdListaDetalleTabla.FocusedRowIndex = -1;

        }


        void RecuperarDatosAModificados() {

            txtNombreM.Text = Convert.ToString(grdListaTabla.GetRowValues(grdListaTabla.FocusedRowIndex, "NOM_TABLA"));
            txtObservacionM.Text = Convert.ToString(grdListaTabla.GetRowValues(grdListaTabla.FocusedRowIndex, "DES_OBSERVACIONES"));
            cboModuloM.Text = Convert.ToString(grdListaTabla.GetRowValues(grdListaTabla.FocusedRowIndex, "NOM_MODULO"));
            chkActivoM.Checked = Convert.ToBoolean(grdListaTabla.GetRowValues(grdListaTabla.FocusedRowIndex, "IND_ACTIVO"));
            lbltabla.Text = Convert.ToString(grdListaTabla.GetRowValues(grdListaTabla.FocusedRowIndex, "NOM_TABLA"));

        }




        //operaciones modificacion


        void ListaTablaDetalle()
        {

            try
            {
                int id_general_cab = Convert.ToInt32(grdListaTabla.GetRowValues(grdListaTabla.FocusedRowIndex, "ID_GENERAL_CAB"));
                grdListaDetalleTabla.DataSource = itablageneralDet.lista(id_general_cab);
                grdListaDetalleTabla.DataBind();
            }

            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaTablaDetalle");
                MensajesError(ex.Message, ex, "ListaTablaDetalle");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaTablaDetalle");
                MensajesError(ex.Message, ex, "ListaTablaDetalle");
            }

        }


        void GrabarDetalle()
        {


            try
            {
                T_MAE_TABLA_GENERAL_DET t_mae_tabla_general = new T_MAE_TABLA_GENERAL_DET();
                t_mae_tabla_general.ID_GENERAL_DET = itablageneralDet.UltimoNumero() + 1;
                t_mae_tabla_general.ID_GENERAL_CAB = Convert.ToInt32(grdListaTabla.GetRowValues(grdListaTabla.FocusedRowIndex, "ID_GENERAL_CAB"));
                t_mae_tabla_general.DES_CORTA = txtDescripcionCorta.Text;
                t_mae_tabla_general.DES_LARGA = txtDescripcionLarga.Text;
                t_mae_tabla_general.IMP_VALOR = SpinValorN.Number;
                t_mae_tabla_general.DES_LARGA_OPCIONAL = txtDescripcionOpcional.Text;
                if (chcActivoDN.Checked == true)
                {
                    t_mae_tabla_general.IND_ACTIVO = true;
                }
                else
                {
                    t_mae_tabla_general.IND_ACTIVO = false;
                }


                if (itablageneralDet.Insertar(t_mae_tabla_general))
                {


                    lblMsjSql.Text = string.Empty;
                    lblMsjSql.Text = "Se grabó correctamente";
                    string scriptExeption = "ShowPopupMsjSql();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);
                }
                else
                {



                    lblMsjSql.Text = string.Empty;
                    lblMsjSql.Text = "Error al grabar en la Base Datos";
                    string scriptExeption = "ShowPopupMsjSql();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);
                }

            }
            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "GrabarDetalle");
                MensajesError(ex.Message, ex, "GrabarDetalle");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "GrabarDetalle");
                MensajesError(ex.Message, ex, "GrabarDetalle");
            }




        }




        void modificarDetalle()
        {




            try
            {

                T_MAE_TABLA_GENERAL_DET t_mae_tabla_general = new T_MAE_TABLA_GENERAL_DET();
                t_mae_tabla_general.ID_GENERAL_DET = Convert.ToInt32(grdListaDetalleTabla.GetRowValues(grdListaDetalleTabla.FocusedRowIndex, "ID_GENERAL_DET"));
                t_mae_tabla_general.ID_GENERAL_CAB = Convert.ToInt32(grdListaTabla.GetRowValues(grdListaTabla.FocusedRowIndex, "ID_GENERAL_CAB"));
                t_mae_tabla_general.DES_CORTA = txtDescCortaM.Text;
                t_mae_tabla_general.DES_LARGA = txtDesLargaM.Text;
                t_mae_tabla_general.IMP_VALOR = SpinValor.Number;
                t_mae_tabla_general.DES_LARGA_OPCIONAL = txtDescripcionOpcionalM.Text;
                if (chkActivoMD.Checked == true)
                {
                    t_mae_tabla_general.IND_ACTIVO = true;
                }
                else
                {
                    t_mae_tabla_general.IND_ACTIVO = false;
                }


                if (itablageneralDet.Modificar(t_mae_tabla_general))
                {
                    lblMsjSql.Text = string.Empty;
                    lblMsjSql.Text = "Se Actualizó correctamente";
                    string scriptExeption = "ShowPopupMsjSql();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);
                }
                else
                {


                    lblMsjSql.Text = string.Empty;
                    lblMsjSql.Text = "Error al actualizar en la Base Datos";
                    string scriptExeption = "ShowPopupMsjSql();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);

                }


            }
            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "modificarDetalle");
                MensajesError(ex.Message, ex, "modificarDetalle");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "modificarDetalle");
                MensajesError(ex.Message, ex, "modificarDetalle");
            }


        }





        void limpiarControlesCAb() {
            txtNombre.Text = string.Empty;
            txtObservacion.Text = string.Empty;
            cboModuloN.Text = string.Empty;
        
        }


        protected void btnPopAceptar_Click(object sender, EventArgs e)
        {

            if (txtNombre.Text.Trim() == string.Empty || cboModuloN.Text.Trim() == string.Empty)
            {

                lblMsjSql.Text = string.Empty;
                lblMsjSql.Text = "Rellene los campos requeridos";
                string scriptExeption = "ShowPopupMsjSql();";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);

            }
            else
            {


               

                if ( this.BuscarNombreTabla() ==0)
                {
                    this.GrabarTabla();
                    this.ListaTablaGeneralCab();
                    this.limpiarControlesCAb();
                }
                else
                {

                    lblMsjSql.Text = string.Empty;
                    lblMsjSql.Text = "El nombre ya existe ";
                    string scriptExeption = "ShowPopupMsjSql();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);

                }

            }
        }

        protected void btnPopActualizar_Click(object sender, EventArgs e)
        {
            this.ModificarTabla();
            this.ListaTablaGeneralCab();

        }

        void LimpiarControlesDet() {
            txtDescripcionCorta.Text = string.Empty;
            txtDescripcionLarga.Text = string.Empty;
            txtDescripcionOpcional.Text = string.Empty;
        
        }

        protected void btnPopAceptarDG_Click(object sender, EventArgs e)
        {

            if (txtDescripcionCorta.Text.Trim() == string.Empty ||txtDescripcionLarga.Text.Trim() == string.Empty)
            {
                lblMsjSql.Text = string.Empty;
                lblMsjSql.Text = "Rellene los campos requeridos";
                string scriptExeption = "ShowPopupMsjSql();";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);

            }
            else
            {


                this.GrabarDetalle();
                this.ListaTablaDetalle();
                this.LimpiarControlesDet();
            }
        }

        protected void btnPopAceptarDM_Click(object sender, EventArgs e)
        {
            this.modificarDetalle();
            this.ListaTablaDetalle();
        }

        protected void grdListaDetalleTabla_FocusedRowChanged(object sender, EventArgs e)
        {

            this.RecuperarDatosDetalleAModificar();


        }

        void RecuperarDatosDetalleAModificar() {


            lblTablaM.Text = Convert.ToString(grdListaDetalleTabla.GetRowValues(grdListaDetalleTabla.FocusedRowIndex, "NOM_TABLA"));
            txtDescCortaM.Text = Convert.ToString(grdListaDetalleTabla.GetRowValues(grdListaDetalleTabla.FocusedRowIndex, "DES_CORTA"));
            txtDesLargaM.Text = Convert.ToString(grdListaDetalleTabla.GetRowValues(grdListaDetalleTabla.FocusedRowIndex, "DES_LARGA"));
            chkActivoMD.Checked = Convert.ToBoolean(grdListaDetalleTabla.GetRowValues(grdListaDetalleTabla.FocusedRowIndex, "IND_ACTIVO"));
            SpinValor.Number = Convert.ToDecimal(grdListaDetalleTabla.GetRowValues(grdListaDetalleTabla.FocusedRowIndex, "IMP_VALOR"));
            txtDescripcionOpcionalM.Text = Convert.ToString(grdListaDetalleTabla.GetRowValues(grdListaDetalleTabla.FocusedRowIndex, "DES_LARGA_OPCIONAL"));
        }

        protected void grdListaDetalleTabla_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            this.ListaTablaDetalle();
        }

        protected void grdListaDetalleTabla_PageIndexChanged(object sender, EventArgs e)
        {
            this.ListaTablaDetalle();
        }

        protected void btnSalirGeneral_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Seguridad/wFrmDefault.aspx?id="+ConfigurationManager.AppSettings["Seguridad"]);
        }

        protected void btnModificar_Click1(object sender, EventArgs e)
        {
            if (grdListaTabla.FocusedRowIndex == -1) { 
            
            
                lblMsjSql.Text = string.Empty;
                lblMsjSql.Text = "Seleccione un registro por favor";
                string scriptExeption = "ShowPopupMsjSql();";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);

            
            }else{


                string scriptExeption = "ShowPopupModificar();";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);

            }



        }

        protected void btnModifica_Click(object sender, EventArgs e)
        {
            if (grdListaDetalleTabla.FocusedRowIndex == -1)
            {


                lblMsjSql.Text = string.Empty;
                lblMsjSql.Text = "Seleccione un registro por favor";
                string scriptExeption = "ShowPopupMsjSql();";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);


            }
            else
            {


                string scriptExeption = "ShowPopupDetModificar();";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptExeption, true);

            }
        }

        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu, number);
            }
            catch (DataException e)
            {

                MensajesError(e.Message, e, "GuardarExceptionLog");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "GuardarExceptionLog");
            }

        }



        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }

        protected void grdListaDetalleTabla_HtmlRowPrepared(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewTableRowEventArgs e)
        {
            if (e.RowType != GridViewRowType.Data) return;
            Boolean ind_estado = Convert.ToBoolean(e.GetValue("IND_ACTIVO"));
            if (ind_estado ==false)
                e.Row.BackColor = Color.Red;

        }

    }
}